home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / metkit / mydlg.cpp < prev    next >
C/C++ Source or Header  |  1997-06-07  |  3KB  |  133 lines

  1. //    Copyright (C) 1996, 1997 Meta Four Software.  All rights reserved.
  2. //
  3. //    Display server sample code
  4. //
  5. //! rev="$Id: mydlg.cpp,v 1.3 1997/05/27 00:06:22 jcw Rel $"
  6.  
  7. #include "stdafx.h"
  8. #include "catrecv.h"
  9. #include "MyDlg.h"
  10. #include "TreeDlg.h"
  11.  
  12. #ifdef _DEBUG
  13. //#define new DEBUG_NEW
  14. #undef THIS_FILE
  15. static char THIS_FILE[] = __FILE__;
  16. #endif
  17.  
  18. /////////////////////////////////////////////////////////////////////////////
  19. // CMyDlg dialog
  20.  
  21. CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
  22.     : CDialog(CMyDlg::IDD, pParent), _timer (0), _server (0)
  23. {
  24.     //{{AFX_DATA_INIT(CMyDlg)
  25.     //}}AFX_DATA_INIT
  26. }
  27.  
  28. CMyDlg::~CMyDlg ()
  29. {
  30.     delete _server;                        // shutdown the server
  31. }
  32.  
  33. void CMyDlg::DoDataExchange(CDataExchange* pDX)
  34. {
  35.     CDialog::DoDataExchange(pDX);
  36.     //{{AFX_DATA_MAP(CMyDlg)
  37.     DDX_Control(pDX, IDC_PORT, m_port);
  38.     //}}AFX_DATA_MAP
  39. }
  40.  
  41. BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
  42.     //{{AFX_MSG_MAP(CMyDlg)
  43.     ON_EN_CHANGE(IDC_PORT, OnChangePort)
  44.     ON_WM_TIMER()
  45.     //}}AFX_MSG_MAP
  46. END_MESSAGE_MAP()
  47.  
  48. /////////////////////////////////////////////////////////////////////////////
  49. // [JCW]  This code added for MetaKit CATRECV
  50.  
  51. BOOL CMyDlg::OnInitDialog()
  52. {
  53.     CDialog::OnInitDialog();
  54.  
  55.     m_port.SetWindowText("12345");
  56.  
  57.     return TRUE;  // return TRUE  unless you set the focus to a control
  58. }
  59.  
  60. // called at start and whenever the m_port edit control has changed
  61. void CMyDlg::OnChangePort() 
  62. {
  63.     delete _server;
  64.     _server = 0;
  65.  
  66.     KillTimer(_timer);                    // forget pending timeouts
  67.     _timer = SetTimer(1, 1000, 0);        // timeout 1 second from now
  68. }
  69.  
  70.     // this will be called by the CServer object to set up a new connection 
  71.     static void StartNewConnection(CFile& file_)
  72.     {
  73.         DEBUG_NEW CTreeDialog (file_);    // creates a modeless dialog box
  74.     }
  75.  
  76. // use a delay to wait for a good port number before (re-)creating a server
  77. void CMyDlg::OnTimer(UINT nIDEvent) 
  78. {
  79.     KillTimer(_timer);                    // avoid further timeouts
  80.     _timer = 0;
  81.  
  82.         // called one second after the last change to the m_port edit control
  83.     CString s;
  84.     m_port.GetWindowText(s);
  85.     int port = atoi(s);
  86.  
  87.     if (port > 0)
  88.     {
  89.             // set up a new server listening on the specified port
  90.         ASSERT(!_server);
  91.         _server = DEBUG_NEW CServer (port, StartNewConnection);
  92.     }
  93.     else
  94.         MessageBeep(MB_OK);
  95.  
  96.     CDialog::OnTimer(nIDEvent);
  97. }
  98.  
  99. /////////////////////////////////////////////////////////////////////////////
  100. // CServer socket, this sample code does no error checking
  101.  
  102. CServer::CServer (int port_, ConnectHandler handler_)
  103.     : _port (port_), _handler (handler_)
  104. {
  105.     OnClose(0);    // simulate a lost connection to start things up
  106. }
  107.  
  108. CServer::~CServer ()
  109. {
  110.     Close();
  111. }
  112.  
  113. void CServer::OnAccept(int /* error_ */)
  114. {
  115.     CSocket session;
  116.     VERIFY(Accept(session));
  117.  
  118.     CSocketFile data (&session);
  119.  
  120.     ASSERT(_handler);
  121.     _handler(data);
  122. }
  123.  
  124. void CServer::OnClose(int /* error_ */)
  125. {
  126.     Close();
  127.  
  128.     VERIFY(Create(_port));
  129.     VERIFY(Listen());
  130. }
  131.  
  132. /////////////////////////////////////////////////////////////////////////////
  133.